之前在網路上查資料的時候,
常常看到有人用這樣的標題再寫,
這次鐵人文的開頭就用這個標題來做起頭吧!
這一篇是比較理論的部分,
也是一個比較基本的概念,
基本上是從網路上的文章跟之前看到的文章加上自己的一點心得寫出來的,
那到底什麼是MVC呢?
Model-View-Controller(MVC)是一種設計模式(design pattern), 主要目的是用來簡化應用程式的開發與增強程式的可維護性, 其做法是將應用程式分割成以下三個邏輯的元件 :
模型(Model)
用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。「 Model 」有對資料直接存取的權力,例如對資料庫的存取。「Model」不依賴「View」和「Controller」,也就是說, Model 不關心它會被如何顯示或是如何被操作。但是 Model 中資料的變化一般會通過一種重新整理機制被公布。為了實現這種機制,那些用於監視此 Model 的 View 必須事先在此 Model 上註冊,從而,View 可以了解在資料 Model 上發生的改變。(比較:觀察者模式(軟體設計模式))
視圖(View)
能夠實現資料有目的的顯示(理論上,這不是必需的)。在 View 中一般沒有程式上的邏輯。為了實現 View 上的重新整理功能,View 需要存取它監視的資料模型(Model),因此應該事先在被它監視的資料那裡註冊。
控制器(Controller)
起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出回應。「事件」包括用戶的行為和資料 Model 上的改變。
使用MVC來進行網路應用程式開發有很多優點, 包含程式碼簡潔與程式升級的彈性, 但最為人稱讚的優點在於可以將一個專案的開發分成三個不同的角色來增加協同作業的效率。
Development -
對應到MVC中的Model元件, 這部分主要是由熟悉伺服端程式語言(ex:PHP/Python/RoR/ ASP.Net / Perl...etc), 資料庫管理與設計, 資訊架構, 演算法, 以及資料驗證等技術的工程師所負責, 這個角色負責建構應用程式運作細節並提供APIs以及如何與資料互動的規則。
Design -
對應到MVC中的View元件, 一般來說負責此部分的是熟悉圖像製作, HTML, CSS以及Javascript的視覺設計人員。
Integration -
對應到MVC中的Controller元件, 整合者主要負責將視覺設計師所開發出的靜態頁面轉換成嵌有程式的動態頁面, 將資料利用表單發送到Model Layer, 接收並轉換Model Layer所回傳的資料並呈現在View Layer之上
MVC的缺點是由於他沒有明確的定義,所以完全理解MVC並不是很容易。使用MVC需要精心的規劃,由於它內部原理比較複雜,所以需要花費一些時間去思考。
你不得不花費相當的時間去思考如何將MVC套用到你要開發的東西商面,同時由於模型和顯示要嚴格分離,這也是一件相當困的事情。每個物件在使用之前都需要經過徹底的測試。
由於我們將一個要開發的軟體分成了三個部分,所以使用MVC同時也意味著你要管理比以前更多的文件,這一點是顯而易見的。這樣好像我們的工作量增加了,但請記住這比他所帶來的好處是不值得一提的。
簡單來說,MVC是由三個概念所構成,可以用在各種的網頁程式語言當中,View是讓使用者看的,Controller是處理使用者引發的事件,其中最有爭議的就是Model,基本上處理後端的事件如讀取資料庫是屬於Model的部分,但是Model的範圍太廣,定義也很難清楚,很多人討論、爭論到最後還是沒有一個結果,所以這部分稍微瞭解一下即可。
這30天主要是分享微軟開發的ASP.NET MVC的部分,微軟將MVC的架構放到ASP.NET MVC當中,ASP.NET MVC跟ASP.NET其實有很大的差別,這個部分將會在下一篇來分享。
參考資料:
[資訊] 什麼是MVC?What's Model-View-Controller?
維基百科-MVC